#include<bits/stdc++.h>
using namespace std;
const int N = 110;

int a[N]; // 保存每个人初始位置 
int dif[N];
int n, x;

bool check() { // 判断是否处于比必败点 
    int res = 0;
    for (int i = 1; i < n; i += 2) res ^= dif[i];
    return res == 0; // 异或和等于0说明处于必败点 
}

int main()
{
    while (cin >> a[++n]); n--; // 输入a 

    for (int i = 1; i < n; i++) dif[i] = a[i + 1] - a[i] - 1; // 求dif 

    if (check()) puts("-1"); // 初始状态下就已经是必败点了，那就输出-1 
    else { // 初始状态为必胜点，那我就去找个一个操作使得对手进入必败点，还得保证尽可能对靠左的和尚进行操作 
        for (int i = 1; i < n; i++) { // 从最左侧的和尚开始遍历 
            for (int j = 1; j <= dif[i]; j++) { // 遍历这个和尚和他的后一个和尚的台阶，之所以遍历这个，我们是想找到一个状态，正是上面所说的状态，即处于必败点的状态 
                dif[i] -= j; // 我让这个和尚向上走j个台阶，那么这个和尚和他的上一个和尚的距离就要-j 
                dif[i - 1] += j; // 那么这个和尚和他的下一个和尚的距离就要+j
                if (check()) { printf("%d %d", a[i], a[i] + j); return 0; } // 判断一下这个状态是不是我们要找的状态，即必败点 
                dif[i] += j; // 若不是必败点，那么我就将这个和尚恢复到原来的位置，那么这个和尚和他的上一个和尚的距离就要+j 
                dif[i - 1] -= j; // 那么这个和尚和他的下一个和尚的距离就要-j
            }
        }
    }
    return 0;
}